package br.com.virtual.base.controller.cadastro;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import br.com.virtual.base.enums.ActionFormEnum;
import br.com.virtual.base.exceptions.VirtualValidationException;
import br.com.virtual.cadastrar.model.Grupo;
import br.com.virtual.cadastrar.service.GrupoService;

@ManagedBean
@ViewScoped
public class GrupoMB implements Serializable {


	private static final long serialVersionUID = 1L;
	private Grupo grupo;
	private List<Grupo> grupos;
	private List<Grupo> gruposAtivos;

	private ActionFormEnum stateForm = ActionFormEnum.CREATE;

	@EJB
	private GrupoService grupoService;

	public GrupoMB() {

	}

	public GrupoService getGrupoService() {
		return grupoService;
	}

	public void setGrupoService(GrupoService grupoService) {
		this.grupoService = grupoService;
	}

	@PostConstruct
	public void init() {

		grupo = new Grupo();
		grupos = null;
		stateForm = ActionFormEnum.CREATE;
	}


	public void save() {

		try {

			if (stateForm.equals(ActionFormEnum.CREATE))
				grupoService.create(grupo);
			else if (stateForm.equals(ActionFormEnum.UPDATE))
				grupoService.update(grupo);


			generateFacesMessage("Operação realizada com sucesso.",
					FacesMessage.SEVERITY_INFO);

		} catch (VirtualValidationException e) {

			for (String s : e.getErros()) {
				generateFacesMessage(s, FacesMessage.SEVERITY_ERROR);
			}

		}

		init();
	}

	public void edit() {
		stateForm = ActionFormEnum.UPDATE;
	}

	public String delete(ActionEvent evento) {

		try {
			grupoService.delete(grupo);
			generateFacesMessage("Item excluido com sucesso.",
					FacesMessage.SEVERITY_INFO);

		} catch (VirtualValidationException e) {

			for (String s : e.getErros()) {
				generateFacesMessage(s, FacesMessage.SEVERITY_ERROR);
			}

		}
		init();
		return "";
	}

	private void generateFacesMessage(String message,
			FacesMessage.Severity severity) {

		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage(severity, message, ""));
	}

	/*
	 * GETTERS AND SETTERS
	 */
	public Grupo getGrupo() {
		return grupo;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public List<Grupo> getGrupos() {
		if (grupos == null) {
			grupos = grupoService.getList();
//			Collections.sort(grupos);
		}

		return grupos;
	}

	public void setGrupos(List<Grupo> listCat) {
		this.grupos = listCat;
	}

	public List<Grupo> getGruposAtivos() {

		if (gruposAtivos == null) {
			gruposAtivos = grupoService.getListAtivo();
			Collections.sort(gruposAtivos);
		}
		return gruposAtivos;
	}

	public void setGruposAtivos(List<Grupo> gruposAtivos) {
		this.gruposAtivos = gruposAtivos;
	}

	public ActionFormEnum getStateForm() {
		return stateForm;
	}

	public void setStateForm(ActionFormEnum stateForm) {
		this.stateForm = stateForm;
	}

}
